package com.zjut.szq.demo.dao;

import java.io.Serializable;
import java.util.List;

public interface BaseDAO<T> {

	/** 保存或更新指定的持久化对象 */
	public abstract void save(T obj);

	/** 保存或更新指定的持久化对象 */
	public abstract void saveOrUpdate(T obj);

	/** 删除指定ID的持久化对象 */
	public abstract void deleteById(Class<T> clazz, Serializable id);

	/** 删除指定ID的持久化对象 */
	public abstract void delete(T obj);

	/** 加载指定ID的持久化对象 */
	public abstract Object loadById(Class<T> clazz, Serializable id);

	/** 分页查询指定类的满足条件的持久化对象 */
	public abstract List<T> findByHql(String hql, int start, int limit,
			Object... params);

	/** 查询指定类的满足条件的持久化对象 */
	public abstract List<T> findByHql(String hql);

	/** 查询指定类的满足条件的持久化对象 */
	public abstract List<T> findByHql(String hql, Object... params);

	/** 装载指定类的所有持久化对象 */
	public abstract List<T> listAll(Class<T> clazz);

	/** 分页装载指定类的所有持久化对象 */
	public abstract List<T> listAll(Class<T> clazz, int start, int limit);

	/** 装载指定类的查询结果 */
	public abstract List<T> findByProperty(Class<T> clazz, String propertyName,
			Object value);

	/** 装载指定类的查询结果 */
	public abstract List<T> findByProperty(Class<T> clazz, String[] propertyName,
			Object[] value);

	/** 分页装载指定类的查询结果 */
	public abstract List<T> findByProperty(Class<T> clazz, String propertyName,
			String value, int start, int limit);

	/** 分页装载指定类的查询结果 */
	public abstract List<T> findByProperty(Class<T> clazz, String[] propertyName,
			Object[] value, int start, int limit);

	/** 装载指定类的查询结果 */
	public abstract List<T> findInProperty(Class<T> clazz, String propertyName,
			String value);

	/** 分页装载指定类的查询结果 */
	public abstract List<T> findInProperty(Class<T> clazz, String propertyName,
			String value, int start, int limit);

	/** 装载指定类的查询结果 */
	public abstract List<T> findLikeProperty(Class<T> clazz, String propertyName,
			String value);

	/** 分页装载指定类的查询结果 */
	public abstract List<T> findLikeProperty(Class<T> clazz, String propertyName,
			String value, int start, int limit);

	/** 统计指定类的所有持久化对象 */
	public abstract int countAll(Class<T> clazz);

	/** 统计指定类的查询结果 */
	public abstract int countQuery(String hql);

	/** 统计指定类的查询结果 */
	public abstract int countQuery(String hql, Object[] value);

	/** 批量保存、修改 */
	public abstract void saveOrUpdateAll(Object[] objects);

	/** 执行SQL */
	public abstract boolean executeSql(String sql);

}